#!/bin/sh
add_chain() {
  /sbin/iptables -N $1
  /sbin/iptables -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -A in_mod -j $1
  /sbin/iptables -t nat -N $1
  /sbin/iptables -t nat -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -t nat -A pre_mod -j $1
}

del_chain() {
  /sbin/iptables -D in_mod -j $1
  /sbin/iptables -F $1
  /sbin/iptables -X $1
  /sbin/iptables -t nat -D pre_mod -j $1
  /sbin/iptables -t nat -F $1
  /sbin/iptables -t nat -X $1
}

. /etc/settings
. /etc/$PROFILE/settings.eth
. /etc/rc.d/init.d/ip

case "$1" in
  start|restart)
	. /opt/WoLGateway/etc/settings
  
  POOL="range $ETH_DHCP_POOL_LO $ETH_DHCP_POOL_HI;"

  if [ "$ETH_DHCP_STAT_ENABLED" = "1" ]; then
    [ -n "$ETH_DHCP_STAT_MAC1" ] && [ -n "$ETH_DHCP_STAT_IPADDR1" ] && HOST1="\\nhost 1 { hardware ethernet $ETH_DHCP_STAT_MAC1; fixed-address $ETH_DHCP_STAT_IPADDR1; }"
    [ -n "$ETH_DHCP_STAT_MAC2" ] && [ -n "$ETH_DHCP_STAT_IPADDR2" ] && HOST2="\\nhost 2 { hardware ethernet $ETH_DHCP_STAT_MAC2; fixed-address $ETH_DHCP_STAT_IPADDR2; }"
    [ -n "$ETH_DHCP_STAT_MAC3" ] && [ -n "$ETH_DHCP_STAT_IPADDR3" ] && HOST3="\\nhost 3 { hardware ethernet $ETH_DHCP_STAT_MAC3; fixed-address $ETH_DHCP_STAT_IPADDR3; }"
    [ -n "$ETH_DHCP_STAT_MAC4" ] && [ -n "$ETH_DHCP_STAT_IPADDR4" ] && HOST4="\\nhost 4 { hardware ethernet $ETH_DHCP_STAT_MAC4; fixed-address $ETH_DHCP_STAT_IPADDR4; }"
    [ -n "$ETH_DHCP_STAT_MAC5" ] && [ -n "$ETH_DHCP_STAT_IPADDR5" ] && HOST5="\\nhost 5 { hardware ethernet $ETH_DHCP_STAT_MAC5; fixed-address $ETH_DHCP_STAT_IPADDR5; }"
    [ -n "$ETH_DHCP_STAT_MAC6" ] && [ -n "$ETH_DHCP_STAT_IPADDR6" ] && HOST6="\\nhost 6 { hardware ethernet $ETH_DHCP_STAT_MAC6; fixed-address $ETH_DHCP_STAT_IPADDR6; }"
  fi
  echo -e "option routers $ETH_IPADDR;" \
      "\\noption domain-name-servers $ETH_IPADDR;" \
      "\\ndefault-lease-time $ETH_DHCP_LEASE_TIME;" \
      "\\nmax-lease-time 86400;" \
      "\\nsubnet `ip_calc_network $ETH_IPADDR $ETH_NETMASK` netmask $ETH_NETMASK { $POOL }" \
      "$HOST1$HOST2$HOST3$HOST4$HOST5$HOST6" > /var/dhcp/dhcpd.conf
  touch /var/dhcp/dhcpd.leases  
  
	if [ "$1" = "restart" ]; then
	    echo -n "Restarting module WoLGateway: "
	    killall bforward 2> /dev/null
            del_chain mod_wolgateway 2> /dev/null
	else
	    echo -n "Starting module WoLGateway: "
	fi
	if [ "$MOD_WOLGATE_ENABLED" != "1" ]; then
	    echo "skipped"
	    exit 0
	fi

  # nastaveni domain-name-servers
  if [ -n "$MOD_WOLGATE_DNS_IPADDR1" ]; then
    DNS_SERVERS="$MOD_WOLGATE_DNS_IPADDR1";    
    if [ -n "$MOD_WOLGATE_DNS_IPADDR2" ]; then DNS_SERVERS=$DNS_SERVERS", $MOD_WOLGATE_DNS_IPADDR2"; fi
    if [ -n "$MOD_WOLGATE_DNS_IPADDR3" ]; then DNS_SERVERS=$DNS_SERVERS", $MOD_WOLGATE_DNS_IPADDR3"; fi    
    DNS_SERVERS=$DNS_SERVERS";"
    
    sed -e "s/\(option domain-name-servers \).*/\1$DNS_SERVERS/" -i /var/dhcp/dhcpd.conf
  fi
  
  # nastaveni option-161
  if [ -n "$MOD_WOLGATE_FTP_IPADDR" ]; then
    IS_OPT_161=`cat /var/dhcp/dhcpd.conf | grep "option option-161"`
    if [ -n "$IS_OPT_161" ]; then
      sed -e "s/\(option option-161 \).*/\1\"$MOD_WOLGATE_FTP_IPADDR\";/" -i /var/dhcp/dhcpd.conf  
    else
      sed "/subnet/ i\option option-161 \"$MOD_WOLGATE_FTP_IPADDR\";" -i /var/dhcp/dhcpd.conf
    fi
  fi  

  # nastaveni domain-name
  if [ -n "$MOD_WOLGATE_DOMAIN" ]; then
    IS_OPT_DOMAIN=`cat /var/dhcp/dhcpd.conf | grep "option domain-name "`
    if [ -n "$IS_OPT_DOMAIN" ]; then
      sed -e "s/\(option domain-name \).*/\1\"$MOD_WOLGATE_DOMAIN\";/" -i /var/dhcp/dhcpd.conf  
    else
      sed "/subnet/ i\option domain-name \"$MOD_WOLGATE_DOMAIN\";" -i /var/dhcp/dhcpd.conf
    fi
  fi
        add_chain mod_wolgateway udp $MOD_WOLGATE_PORT 2> /dev/null
	/opt/WoLGateway/etc/dhcp_reload &

	/opt/WoLGateway/bin/bforward & 

	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
	exit $RETVAL
	;;
  stop)
	echo -n "Stopping module WoLGateway: "
	killall bforward 2> /dev/null
        del_chain mod_wolgateway 2> /dev/null
	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
	exit $RETVAL
	;;
  status)
	echo -n "Module WoLGateway is "
	killall -0 bforward 2> /dev/null
	RETVAL=$?
	if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
	exit $RETVAL
	;;
  defaults)
	cp /opt/WoLGateway/etc/defaults /opt/WoLGateway/etc/settings 2> /dev/null
	;;
  *)
	echo "Usage: $0 {start|stop|restart|status|defaults}"
	exit 1
esac
